/********************************************
 * 功能说明: 
 * 模块名称: 
 * 系统名称: java敏捷开发平台
 * 软件版权: 
 * 系统版本: 1.0.0
 * 开发人员: zhangfb
 * 开发时间: 2019/3/24 17:31
 * 审核人员: 
 * 相关文档: 
 * 修改记录: 修改日期 修改人员 修改说明
 *********************************************/
package com.hyacinth.ratelimit;

import com.google.common.util.concurrent.RateLimiter;

/**
 * Guava限流
 * @author zhangfb
 * @version 1.0.0.1
 * @since JDK 1.8
 */
public class GuavaRateLimiter {

    /** 1s中产生2个令牌，相当于每个令牌需要500毫秒 **/
    private static RateLimiter limiter = RateLimiter.create(2);


    private static class Task implements Runnable {

        private int taskId; // 请求id

        public Task(int taskId) {
            this.taskId = taskId;
        }

        @Override
        public void run() {
            System.out.println(System.currentTimeMillis()+"-->处理请求："+ taskId);
        }
    }

    public static void main(String[] args) throws InterruptedException {
        for (int i = 1; i <= 50000000; i++) {
//            limiter.acquire(); // 过载请求进入等待
            if (!limiter.tryAcquire()) { // 过载请求丢弃
                continue;
            }
            new Thread(new Task(i)).start();
        }
    }
}
